package io.github.yotta.export.core.export;

import io.github.yotta.common.api.model.ApiPageRequest;
import io.github.yotta.export.core.model.XlsxDataExportResult;

import java.util.concurrent.Future;
import java.util.function.Consumer;

/**
 * @author yotta
 * @date 2023/10/24 16:43
 */
public interface ExcelExporterExecutor {

    /**
     * 同步导出
     *
     * @param exportParam      导出参数
     * @param xlsxDataExporter 数据导出钩子函数
     * @param <M>              导出的数据模型的泛型
     * @return 导出结果
     */

    <R extends ApiPageRequest, M> XlsxDataExportResult exportXlsx(R exportParam, ExcelDataExporter<M, R> xlsxDataExporter);


    /**
     * 异步导出
     *
     * @param exportParam      导出参数
     * @param xlsxDataExporter 数据导出钩子函数
     * @param <M>              导出的数据模型的泛型
     * @return 导出结果
     */
    <R extends ApiPageRequest, M> Future<XlsxDataExportResult> exportXlsxAsync(R exportParam,
                                                                               ExcelDataExporter<M, R> xlsxDataExporter,
                                                                               Consumer<XlsxDataExportResult> onComplete);
}
